package educar.gui.admin;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

import educar.controllers.IController;
import educar.controllers.SearchUserController;
import educar.controllers.WindowDispose;
import educar.gui.IView;
import educar.idioma.Locale;
import educar.listeners.ButtonListener;

import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;

import javax.swing.JRadioButton;
import javax.swing.border.TitledBorder;
import javax.swing.UIManager;

public class SearchUser implements IView {
	/*Ventana principal*/
	private JFrame jfWindow;
	/*campo texto a buscar*/
	private JTextField tfText;
	/*columna sobre la cual buscar*/
	private int columna = 0;

	
	/**
	 * Constructor de la clase
	 * Ventana que permite buscar un usuario
	 * en la tabla ya sea por su nombre o por su numero
	 * @param table "contiene la tabla sobre la cual buscar el usuario"
	 */
	public SearchUser(JTable table) {		
		/*configuro y creo la ventana*/
		jfWindow = new JFrame();		
		jfWindow.setIconImage(Toolkit.getDefaultToolkit().getImage(IView.class.getResource("/educar/media/educar-icon2.png")));
		/*Segun la dimension de la pantalla (resolucion) Centro la ventana*/
		Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
		Point framePos=new Point((int)(screenSize.width)/2-200,(int)(screenSize.height)/2-150);
		jfWindow.setLocation(framePos);
		/*Renombro la ventana*/
		jfWindow.setTitle(Locale.SEARCH+" "+Locale.USERS);
		/*obtengo el panel contenedor y lo configuro*/
		Container container = jfWindow.getContentPane();
		setupMainContainer(container,table);	
		/*configura otras caracteristicas*/
		jfWindow.pack();
		jfWindow.setVisible(true);
		jfWindow.setResizable(false);
		jfWindow.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}

	/**
	 * Configura el contenedor de la ventana
	 * */
	private void setupMainContainer(Container container,JTable table) {
		/*Configura el estilo del contenedor y le agrega un borde en blanco*/
		container.setLayout(new BoxLayout(container, BoxLayout.Y_AXIS));
		((JComponent) container).setBorder(new EmptyBorder(10, 10, 10, 10));
			
		/*Agrega un texto*/
		JLabel lblWelcome = new JLabel(Locale.SEARCH+" "+Locale.USERS);
		lblWelcome.setAlignmentX(Component.CENTER_ALIGNMENT);
		lblWelcome.setFont(new Font("Serif", Font.BOLD, 16));
		lblWelcome.setBorder(new EmptyBorder(0, 10, 10, 10));
		container.add(lblWelcome);

		/*Agrega la casilla de texto a buscar*/
		JLabel lblUserName = new JLabel(Locale.SEARCH+" "+Locale.TEXT);
		tfText = new JTextField(20);
		JPanel searchPane = new JPanel();
		searchPane.setLayout(new BoxLayout(searchPane, BoxLayout.LINE_AXIS));
		searchPane.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
		searchPane.add(Box.createHorizontalGlue());
		searchPane.add(lblUserName);
		searchPane.add(Box.createRigidArea(new Dimension(10, 0)));
		searchPane.add(tfText);
		container.add(searchPane);
		
		/*Crea un panel que contiene los botones*/
		JPanel buttonsPane = new JPanel();
		buttonsPane.setLayout(new BoxLayout(buttonsPane, BoxLayout.LINE_AXIS));
		
		/*Creo el Boton Buscar*/
		JButton bSearch = new JButton(Locale.SEARCH);
		bSearch.setAlignmentX(Component.LEFT_ALIGNMENT);
		ButtonListener buttonListener = new ButtonListener();
		IController search = new SearchUserController(table);
		search.setView(this);
		buttonListener.associate(bSearch, search);		
		
		/*Creo el Boton Cerrar*/
		JButton bExit = new JButton(Locale.CLOSE);
		bExit.setAlignmentX(Component.RIGHT_ALIGNMENT);
		ButtonListener closeListener = new ButtonListener();
		IController closeController = new WindowDispose();
		closeController.setView(this);
		closeListener.associate(bExit, closeController);		
		/*Creo un panel que contiene los radio buttons*/
		JPanel panel = new JPanel();
		panel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "By", TitledBorder.LEADING, TitledBorder.TOP, null, null));
		container.add(panel);
		/**
		 * Creo los radio buttons
		 */		
		/*Boton User Number*/
		JRadioButton rdbtnUserNro = new JRadioButton(Locale.NUMBER);
		rdbtnUserNro.setSelected(true);
		rdbtnUserNro.setActionCommand("number");
		rdbtnUserNro.addActionListener(new ActionListener () {public void actionPerformed(ActionEvent e){columna = 0;}});
		panel.add(rdbtnUserNro);
		/*Boton Admin*/		
		JRadioButton rdbtnUserName = new JRadioButton(Locale.USER_NAME);
		rdbtnUserName.setActionCommand("name");		
		rdbtnUserName.addActionListener(new ActionListener () {public void actionPerformed(ActionEvent e){columna = 1;}});
		panel.add(rdbtnUserName);	
		
		/*Agrupo los botones para que sean excluyentes*/
	    ButtonGroup group = new ButtonGroup();
	    group.add(rdbtnUserNro);
	    group.add(rdbtnUserName);		
		
	    /*Agrego los Botones Buscar-Salir*/
		buttonsPane.add(bSearch);
		/*Un separador entre los botones*/
		Component verticalStrut = Box.createVerticalStrut(20);
		verticalStrut.setMaximumSize(new Dimension(10, 20));
		buttonsPane.add(verticalStrut);
		buttonsPane.add(bExit);
		/*agrego el panel de botones al final del cuadro principal*/
		container.add(buttonsPane, BorderLayout.PAGE_END);
	}

	
	/**
	 * Retorna el texto a buscar
	 * @return String "cotiene el texto a buscar"
	 */
	public String getTextToSearch() {
		return tfText.getText().trim();
	}
	
	/**
	 * Establece el numero de columna sobre la cual buscar
	 * @param n "numero de columna sobre la cual buscar"
	 */
	public void setColumn(int n) {
		columna = n;
	}
	
	/**
	 * Devuelve sobre cual columna buscar
	 * @return "el numero de columna sobre la cual buscar"
	 */
	public int getColumna() {
		return columna;
	}
	

	/**
	 * Sirve para abrir una ventana con texto
	 * @param model "texto a mostrar"
	 */
	public void present(String model) {
		JOptionPane.showMessageDialog(null, model," " + Locale.MESSAGE,1);
	}
	
	/**
	 * Sirve para abrir un carte de warning
	 * @param msg "String texto del mensaje"
	 * @param title "String titulo de la ventana"
	 */
	public void presentWarning(String msg,String title) {
		JOptionPane.showMessageDialog(null,msg,title,JOptionPane.WARNING_MESSAGE);
	}

	
	/**
	 * Cierra la ventana actual sin salir del programa
	 */
	public void close(){
		jfWindow.dispose();
	}

	/**
	 * Permite Agregar un listener a la ventana
	 * @param windowAdapter
	 */
	public void addWindowListener(WindowAdapter windowAdapter) {
		jfWindow.addWindowListener(windowAdapter);
		
	}
}